package com.david.dubbo.loadbalance;

import org.apache.dubbo.common.URL;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.cluster.LoadBalance;

import java.util.List;

/**
 * @author David
 * @version V1.0
 * @Package com.david.dubbo.loadbalance
 * @date 2021/4/15 11:21
 */
public class OnlyFirstLoadBalance implements LoadBalance {
    public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException {

        //所有服务的提供者按照 ip+端口排序，返回第一个
        invokers.stream().sorted((i1, i2) -> {
            int i = i1.getUrl().getIp().compareTo(i2.getUrl().getIp());
            if (i == 0) {
                int n = Integer.compare(i1.getUrl().getPort(), i2.getUrl().getPort());
                return n;
            }
            return i;
        }).forEach(i-> System.out.println(i.getUrl().getIp()+i.getUrl().getPort()));
        Invoker<T> invoker = invokers.stream().findFirst().get();
        System.out.println("选择的服务ip和端口："+invoker.getUrl().getIp()+invoker.getUrl().getPort());
        return invoker;
    }
}
